package homevideo_model

import (
	"iptv_server/v3/src/database"

	"gorm.io/gorm"
)

type Category struct {
	// gorm.Model
	ID   uint   `gorm:"primarykey" json:"type_id"` // ID=0 被 Detail重定向的目标
	Type int    `json:"type_flag"`                 // h.Type = 2 //1=list , 2=cover
	Pic  string `gorm:"-" json:"pic,omitempty"`    // 暂时 不用吧..

	Dir string `gorm:"type:varchar(1024)" json:"-"` // 只有others, 是非空的, 用于 生成 数据.

	// HomeId uint   `gorm:"index=idx_home"`
	HomeID  uint     `gorm:"index:idx_homeid_name,unique" json:"-"`
	Name    string   `gorm:"type:varchar(100);index:idx_homeid_name,unique" json:"type_name"`
	Details []Detail `json:"list,omitempty"`

	Limit     int `gorm:"-" json:"limit,omitempty"`
	Page      int `gorm:"-" json:"page,omitempty"`
	PageCount int `gorm:"-" json:"pagecount,omitempty"`

	// Totoal int `gorm:"-" json:"total"`

	More string `gorm:"-" json:"more,omitempty"`
}

// func (home *Home) GetCategory() (cat *Category, err error) {
// 	cat=new(Category)
// 	err = database.DB.First(cat, home.ID).Error
// 	return
// }

// //(cat *Category)
func GetPage(id int, limit int, page int) (cat *Category, err error) {
	cat = new(Category)
	cat.ID = uint(id)
	offset := (page - 1) * limit // page=1,2,3...
	err = database.DB.Model(cat).Preload("Details", func(db *gorm.DB) *gorm.DB {
		return database.DB.Order("id ASC").Limit(limit).Offset(offset)
	}).Find(cat).Error
	if err == nil {
		detail := &Detail{
			CategoryID: cat.ID,
		}
		count, err := detail.Count()

		pagecount := 0
		if err == nil {
			pagecount = int(*count) / limit
			if pagecount*limit < int(*count) {
				pagecount++
			}
		}

		cat.Limit = limit
		cat.Page = page
		cat.PageCount = pagecount
	}

	// cat1 := new(Category)
	// // cat1.ID = id
	// err = database.DB.Model(cat1).Preload("Details").Find(&cat).Error
	// // err = database.DB.Where("category_id = ?", cat.ID).Limit(limit).Offset(offset).Find(&ds).Error
	return
}

// func GetCategory(home *Home, id uint) (cat *Category, err error) {
// 	r := database.DB.Where("home_id = ?", home.ID).Find(cat)
// 	err = r.Error
// 	return
// }

func (cat *Category) Create() error {
	r := database.DB.Create(cat)
	return r.Error
}

func (cat *Category) Save() error {
	r := database.DB.Save(cat)
	return r.Error
}

// func UpdateCategory(db *gorm.DB, id uint, url string, playerArgs string) error {
// 	db.Model(&User{}).Where("id = ?", 1).Select("Name").Updates(User{Name: "Updated Name"})
// 	p := &Category{
// 		url:        url,
// 		playerArgs: playerArgs,
// 	}
// 	p.ID = id
// 	r := db.Save(p)
// 	return r.Error
// }
